#include <memory>
#include <iostream>

using namespace std;

class A;

void func(shared_ptr<A> pa)
{
    cout << "func" << endl;
}

class A : public enable_shared_from_this<A>      // 继承enable_share_from_this<A>，使类A可以使用shared_from_this
{
    public:
    void mem_func()
    {
        func(shared_from_this());               // shared_from_this 返回自身对象的一个shared_ptr，与该对象其他的指针共享引用计数
    }
};

int main()
{
    auto pa = make_shared<A>();
    pa->mem_func();
}